package cn.iocoder.yudao.module.promotion.activity.convert;

import cn.hutool.core.util.StrUtil;
import cn.iocoder.yudao.module.api.product.sku.dto.ProductPropertyValueRespDTO;
import cn.iocoder.yudao.module.api.product.sku.dto.ProductSkuRespDTO;
import cn.iocoder.yudao.module.api.product.spu.dto.ProductSpuRespDTO;
import cn.iocoder.yudao.module.api.promotion.activity.enums.PromotionTypeEnum;
import cn.iocoder.yudao.module.promotion.activity.dal.dataobject.ActivityBaseEntity;
import cn.iocoder.yudao.module.promotion.activity.vo.ActivityProductRespVO;
import cn.iocoder.yudao.module.promotion.activity.vo.ActivityVO;
import org.mapstruct.Mapper;
import org.mapstruct.factory.Mappers;

import java.util.List;

/**
 * 营销活动 Convert
 *
 * @author 山野羡民
 */
@Mapper
public interface ActivityConvert {

    ActivityConvert INSTANCE = Mappers.getMapper(ActivityConvert.class);

    /**
     * @see PromotionTypeEnum
     */
    ActivityVO convert(ActivityBaseEntity bean, Integer type);

    default void convert(ActivityProductRespVO respVO, ProductSpuRespDTO spuRespDTO, ProductSkuRespDTO skuRespDTO) {
        if (spuRespDTO == null) {
            spuRespDTO = new ProductSpuRespDTO();
        }
        if (skuRespDTO == null) {
            skuRespDTO = new ProductSkuRespDTO();
        }
        List<ProductPropertyValueRespDTO> properties = skuRespDTO.getProperties();
        List<String> skuPropertyValues = properties.stream().map(ProductPropertyValueRespDTO::getValueName).toList();
        if (Boolean.FALSE.equals(spuRespDTO.getSpecType())) {
            respVO.setName(spuRespDTO.getName());
        } else {
            respVO.setName(String.join(" ", skuPropertyValues) + " " + spuRespDTO.getName());
        }
        if (StrUtil.isNotBlank(skuRespDTO.getPicUrl())) {
            respVO.setPicUrl(skuRespDTO.getPicUrl());
        } else {
            respVO.setPicUrl(spuRespDTO.getPicUrl());
        }
        respVO.setPrice(skuRespDTO.getPrice());
        respVO.setSpuId(spuRespDTO.getId());
        respVO.setSpuName(spuRespDTO.getName());
        respVO.setSkuId(skuRespDTO.getId());
        respVO.setSkuPropertyValues(skuPropertyValues);
    }

}
